package com.cn.springcloudwechat.common.utils.weixin.api;

import com.cn.springcloudwechat.common.utils.weixin.vo.api.Groups;

import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.List;

/**
 * 微信管理组
 * @创建者 x.c
 * @地址 成都云函科技有限公司
 * @时间 2017年12月15日
 * @版本 v1.0.0
 */
public interface GroupsAPI {
	// 创建标签
	static String create_tag = "/tags/create?access_token=%s";
	// 获取公总号已经创建的标签
	static String query_tag = "/tags/get?access_token=%s";
	// 编辑标签
	static String update_tag = "/tags/update?access_token=%s";
	// 删除标签
	static String delete_tag = "/tags/delete?access_token=%s";
	// 获取标签下粉丝列表
	static String query_tag_user_list = "/user/tag/get?access_token=%s";
	// 批量为用户打标签
	static String add_tag_user = "/tags/members/batchtagging?access_token=%s";
	// 批量为用户取消标签
	static String channel_tag_user = "/tags/members/batchuntagging?access_token=ACCESS_TOKEN";
	// 获取用户身上的标签列表
	static String get_tag_user = "/getidlist?access_token=%s";
	/**
	 * 创建分组地址
	 */
	static String create_groups = "/groups/create?access_token=";

	/**
	 * 查询所有分组地址
	 */
	static String get_groups = "/groups/get?access_token=";

	/**
	 * 查询用户所在分组地址
	 */
	static String get_member_group = "/groups/getid?access_token=";

	/**
	 * 修改分组名称地址
	 */
	static String update_group = "/groups/update?access_token=";

	/**
	 * 移动用户分组地址
	 */
	static String update_member_group = "/groups/members/update?access_token=";

	/**
	 * 批量移动用户分组地址
	 */
	static String update_members_group = "/groups/members/batchupdate?access_token=";

	/**
	 * 删除分组地址
	 */
	static String delete_groups = "/groups/delete?access_token=";
	/**
	 * 获取关注用户 拉取粉丝
	 */
	static String get_user_list="/user/get?access_token=%s";

	// 方法
	/**
	 * 创建标签
	 * 
	 * @方法名:create_tag
	 * @描述:
	 * @param name
	 *            标签名
	 * @return
	 */
	String create_tag(String name);

	/**
	 * 查询标签
	 * 
	 * @方法名:quert_tag
	 * @描述:
	 * @return
	 */
	String quert_tag();

	/**
	 * 修改标签
	 * 
	 * @方法名:update_tag
	 * @描述:
	 * @param id
	 * @param name
	 * @return
	 */
	String update_tag(String id, String name) throws UnsupportedEncodingException;

	/**
	 * 删除标签
	 * 
	 * @方法名:delete_tag
	 * @描述:
	 * @param id
	 * @return
	 */
	String delete_tag(String id) throws UnsupportedEncodingException;

	/**
	 * 获取标签下粉丝列表(某个标签)
	 * 
	 * @方法名:query_tag_user_list
	 * @描述:
	 * @return
	 */
	String query_tag_user_list(String tag_id, String open_id) throws UnsupportedEncodingException;

	/**
	 * 批量为用户打标签
	 * 
	 * @方法名:add_tag_user
	 * @描述:
	 * @param tag_id
	 * @param list
	 * @return
	 */
	String add_tag_user(String tag_id, List<String> list) throws UnsupportedEncodingException;
	/**
	 * 批量为用户取消标签
	 *@方法名:channel_tag_user
	 *@描述:
	 *@param tag_id
	 *@param list
	 *@return
	 */
	String channel_tag_user(String tag_id, List<String> list) throws UnsupportedEncodingException;
	/**
	 * 获取用户所在的标签
	 *@方法名:get_tag_user
	 *@描述:
	 *@param open_id
	 *@return
	 */
	String get_tag_user(String open_id) throws UnsupportedEncodingException;
	/**
	 * 获取关注者用户列表(拉取粉丝 一次最多10000)
	 * 从next_openid开始拉取
	 */
	String get_user_list(String next_openid);
	
	
	
	
	
	
	/**
	 * 创建用户分组
	 * 
	 * <pre/>
	 * 一个公众账号,最多支持创建100个分组
	 * 
	 * @param name
	 *            分组名字(30个字符以内)
	 * @return 分组Id
	 */
	int createGroup(String name);

	/**
	 * 查询所有分组
	 * 
	 * @return 分组集合{@link Groups}
	 */
	List<Groups> getGroups();

	/**
	 * 查询用户所在分组
	 * 
	 * @param openId
	 *            用户openId
	 * @return 分组Id
	 */
	int getGroup(String openId);

	/**
	 * 修改分组名称
	 * 
	 * @param id
	 *            分组Id
	 * @param name
	 *            新的分组名称
	 * @return true 或 false
	 */
	boolean renGroups(int id, String name);

	/**
	 * 移动用户所在分组
	 * 
	 * @param openId
	 *            用户openId
	 * @param groupId
	 *            分组Id
	 * @return true 或 false
	 */
	boolean move2Group(String openId, int groupId);

	/**
	 * 批量移动用户分组
	 * 
	 * @param openIds
	 *            用户openId集合
	 * @param groupId
	 *            分组Id
	 * @return true 或 false
	 */
	boolean batchMove2Group(Collection<String> openIds, int groupId);

	/**
	 * 删除分组
	 * 
	 * @param id
	 *            分组Id
	 * @return true 或 false
	 */
	boolean delGroup(int id);
}
